package com.woniu.cq.medical.common;

import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;

import java.util.regex.Pattern;

/**
 * 表单验证工具类
 * @Author: Klaus
 * @Date: 2020/9/3 19:27
 */
public class ValidationUtils {

    // public Validation validation = new ValidationImpl();
    /***/
    public static final String REGEX_USERACCOUNT = "";

    public static final String REGEX_PHONENUMBER = "^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0,5-9]))\\d{8}$";

    public static final String REGEX_URL = "^([hH][tT]{2}[pP]:/*|[hH][tT]{2}[pP][sS]:/*|[fF][tT][pP]:/*)(([A-Za-z0-9-~]+).)+([A-Za-z0-9-~\\/])+(\\?{0,1}(([A-Za-z0-9-~]+\\={0,1})([A-Za-z0-9-~]*)\\&{0,1})*)$";

    public static final String REGEX_PASSWORD = "";

    public static final String REGEX_EMAIL = "^\\s*\\w+(?:\\.{0,1}[\\w-]+)*@[a-zA-Z0-9]+(?:[-.][a-zA-Z0-9]+)*\\.[a-zA-Z]+\\s*$";

    /** 身份证 */
    public static final String REGEX_IDCARD = "^(\\d{15}$|^\\d{18}$|^\\d{17}(\\d|X|x))$";

    /**
     * 验证字符串是否为空
     *
     * @param cs
     * @return
     */
    public boolean isBlank(final CharSequence cs) {
        return StringUtils.isBlank(cs);
    }

    /**
     * 验证字符串是否不为空
     *
     * @param cs
     * @return
     */
    public boolean isNotBlank(final CharSequence cs) {
        return StringUtils.isNotBlank(cs);
    }

    /**
     * 验证字符串是否是纯数字字符串
     */
    public static boolean isDigits(final CharSequence cs) {
        return StringUtils.isNumeric(cs);
    }

    /**
     * 验证字符串是否是数字型字符串，包括小数
     */
    public static boolean isNumber(String str) {
        return NumberUtils.isParsable(str);
    }

    /**
     * 是否为正数
     * @param str
     * @return
     */
    public static boolean isPossiveNumber(String str){
        if(!isNumber(str)){
            return false;
        }
        return Double.valueOf(str) > 0;
    }

    /**
     * 是否为负数
     * @param str
     * @return
     */
    public static boolean isNegativeNumber(String str){
        if(!isNumber(str)){
            return false;
        }
        return Double.valueOf(str) < 0;
    }

    /**
     * 验证字符串是否是纯字母字符串
     *
     * @param str
     * @return
     */
    public static boolean isAlpha(String str) {
        return StringUtils.isAlpha(str);
    }

    /**
     * 验证是否是url
     *
     * @param url
     * @return
     */
    public boolean isUrl(String url) {
        return match(REGEX_URL, url);
    }

    /**
     * 验证手机号码是否合法
     *
     * @param phoneNumber
     * @return
     */
    public boolean isPhoneNumber(String phoneNumber) {
        return match(REGEX_PHONENUMBER, phoneNumber);
    }

    /**
     * 验证账户是否合法
     *
     * @param userAccount
     * @return
     */
    public boolean isUserAccountValid(String userAccount) {
        return match(REGEX_USERACCOUNT, userAccount);
    }

    /**
     * 验证密码
     *
     * @param str
     * @return
     */
    public boolean isPasswordValid(String str) {
        return match(REGEX_PASSWORD, str);
    }

    /**
     * 验证邮箱
     *
     * @param str
     * @return
     */
    public boolean isEmail(String str) {
        return match(REGEX_EMAIL, str);
    }

    /**
     * @param regex
     *            正则表达式字符串
     * @param str
     *            要匹配的字符串
     * @return 如果str 符合 regex的正则表达式格式,返回true, 否则返回 false;
     */
    private static boolean match(String regex, String str) {
        return Pattern.compile(regex).matcher(str).matches();
    }
}
